﻿///////////////////////////////////////////////////////////////////////////////
// File:        Mutex.cc
// Author:      671643387@qq.com
// Date:        2016年1月5日 下午5:41:51
// Description:
///////////////////////////////////////////////////////////////////////////////

#include "Mutex.hpp"

namespace fog
{
    namespace thread
    {
        Mutex::Mutex(void)
        {
#if defined(__WINDOWS__)
            ::InitializeCriticalSection(&lock_);
#elif defined(__LINUX__)
            lock_ = PTHREAD_MUTEX_INITIALIZER;
#endif
        }

        Mutex::~Mutex(void)
        {
#if defined(__WINDOWS__)
            ::DeleteCriticalSection(&lock_);
#elif defined(__LINUX__)
            ::pthread_mutex_destroy(&lock_);
#endif
        }

        void Mutex::lock(void)
        {
#if defined(__WINDOWS__)
            ::EnterCriticalSection(&lock_);
#elif defined(__LINUX__)
            ::pthread_mutex_lock(&lock_);
#endif
        }

        void Mutex::unlock(void)
        {
#if defined(__WINDOWS__)
            ::LeaveCriticalSection(&lock_);
#elif defined(__LINUX__)
            ::pthread_mutex_unlock(&lock_);
#endif
        }
    }
}